﻿package ${packageEnums};

import ${project}.auto.entity.${model.pojo};
import ${project}.auto.entity.${model.pojo+"Example"};

import java.util.List;
<#--导入-->
<#if model.listFullyQualifiedName?? && (model.listFullyQualifiedName?size > 0) >
<#list model.listFullyQualifiedName as mykey>
import ${mykey};
</#list>
</#if>
/**
* @Title ${tableRemarks}
* @Package ${packageEnums}
* @Description service层接口
* @author ${author}
* @date ${datetime}
*/
public interface ${className} {

	/**
	 * 根据主键查询是否存在记录
	 * 
	 * @param id
	 * @return
	 */
	public boolean isExistsRecord(${primaryKeyType} id);

	/**
	 * 根据条件查询是否存在记录
	 * 
	 * @param example
	 * @return
	 */
	public boolean isExistsRecord(${model.pojo+"Example"} example);

	/**
	 * 根据主键查询符合条件的个数
	 * 
	 * @param id 主键
	 * @return
	 */
	public int countByPrimaryKey(${primaryKeyType} id);

	/**
	 * 根据条件查询符合条件的个数
	 * 
	 * @param example
	 * @return
	 */
	public int countByExample(${model.pojo+"Example"} example);

	/**
	 * 根据主键获取唯一的一条记录
	 * 
	 * @param id 主键
	 * @return
	 */
	public ${model.pojo} getByPrimaryKey(${primaryKeyType} id);
	
	/**
	 * 根据条件获取唯一的一条记录,如果没有查到,则返回空,
	 * 如果查到多条,只返回第一条,判断是否只有一小记录,请使用{countByExample}方法
	 * @param example
	 * @return
	 */
	public ${model.pojo} getByExample(${model.pojo+"Example"} example);

	/**
	 * 根据条件查询符合条件的列表
	 * 
	 * @param example
	 * @return
	 */
	public List<${model.pojo}> searchListByExample(${model.pojo+"Example"} example);
	
	/**
	 * 插入,返回记录的主键Id
	 * 
	 * @param record
	 * @return 记录的主键Id
	 */
	public ${primaryKeyType} insert(${model.pojo} record);

	/**
	 * 批量插入,返回成功个数
	 * 
	 * @param recordList
	 * @return
	 */
	public int batchInsert(List<${model.pojo}> recordList);

	/**
	 * 根据条件删除符合条件的,返回成功个数
	 * 
	 * @param example
	 * @return
	 */
	public int deleteByExample(${model.pojo+"Example"} example);

	/**
	 * 根据主键删除,返回成功个数
	 * 
	 * @param id 主键
	 * @return
	 */
	public int deleteByPrimaryKey(${primaryKeyType} id);

	/**
	 * 根据主键列表删除,返回成功个数
	 * 
	 * @param ids 主键List
	 * @return
	 */
	public int deleteByPrimaryKeys(List<${primaryKeyType}> ids);

	/**
	 * 更新记录
	 * 
	 * @param record
	 * @return
	 */
	public int update(${model.pojo} record);

	/**
	 * 更新记录(只更新更改了的行)
	 * 
	 * @param record
	 * @return
	 */
	public int updateByPrimaryKeySelective(${model.pojo} record);

	/**
	 * 批量更新记录
	 * 
	 * @param recordList
	 * @return
	 */
	public int batchUpdate(List<${model.pojo}> recordList);

	/**
	 * 
	 * @Title saveChangeList
	 * @Description 更新更改过的记录
	 * @param insertedList
	 * @param deletedList
	 * @param updatedList
	 * @return
	 * @throws Exception
	 */
	public int saveChangeList(List<${model.pojo}> insertedList, List<${model.pojo}> deletedList, List<${model.pojo}> updatedList);

	/*
	*==========================================
	*==================其它更新=================
	*==========================================
	*/

<#list model.tablesFields as tablesField>
	/**
	* 根据主键更新${tablesField.fieldsName} [${tablesField.fieldCommon}]
	* @param id 主键
	 * @param ${tablesField.fieldsName} [${tablesField.fieldCommon}]
	* @return
	*/
	public int update${'${tablesField.fieldsName}'?cap_first}(${primaryKeyType} id, ${tablesField.fieldType} ${tablesField.fieldsName});

	/**
	* 根据主键批量更新${tablesField.fieldsName} [${tablesField.fieldCommon}]
	* @param idList 主键列表
	 * @param ${tablesField.fieldsName} [${tablesField.fieldCommon}]
	* @return
	*/
	public int batchUpdate${'${tablesField.fieldsName}'?cap_first}(List<${primaryKeyType}> idList, ${tablesField.fieldType} ${tablesField.fieldsName});
</#list>
}